《高性能網(wǎng)站建設指南》閱讀筆記_規則11-?避免重定向
發(fā)布時(shí)間:2013-11-22 瀏覽:478打印字號:大中小
重定向就是從一個(gè)URL到另一個(gè)URL,它會(huì )使你的頁(yè)面變慢。重定向有很多種,“301 Moved Permancenty”和“302 Moved Temporarily”是最常用的兩種。
301: 用戶(hù)請求的文檔在其他的地方,新的URL在Location中給出,瀏覽器自動(dòng)訪(fǎng)問(wèn)新的URL。,并且是永久性轉移。
302:搜索引擎返回302錯誤表示被請求的資源暫時(shí)轉移(Moved temporatily),然后會(huì )給出一個(gè)轉移后的URL,而瀏覽器在處理服務(wù)器返回的302錯誤時(shí),原則上會(huì )重新建立一個(gè)TCP連接,然后再取重定向后的URL的頁(yè)面;但是如果頁(yè)面存在于緩存中,則不重新獲取。(存在濫用情況)
擴展: 301重定向是一種非常重要的自動(dòng)轉向技術(shù)。在更換域名的時(shí)候起著(zhù)不可替代的作用,他不僅可以實(shí)現網(wǎng)頁(yè)的批量指定轉跳,還可促進(jìn)搜索引擎優(yōu)化效果。不同于302,從搜索引擎優(yōu)化角度出發(fā),301重定向是網(wǎng)址重定向最為可行的一種辦法。當網(wǎng)站的域名發(fā)生變更后,搜索引擎只對新網(wǎng)址進(jìn)行索引,同時(shí)又會(huì )把舊地址下原有的外部鏈接如數轉移到新地址下,從而不會(huì )讓網(wǎng)站的排名因為網(wǎng)址變更而受到絲毫影響。當然各個(gè)搜索引擎對301的處理方式是不一樣的。
302的三大危害:
一:黑帽SEO濫用
302重定向代表著(zhù)暫時(shí)性轉移,程序員設計一段代碼,使點(diǎn)擊訪(fǎng)問(wèn)的目標網(wǎng)址出現在黑帽SEO所要優(yōu)化的網(wǎng)址之內,形成一段由“優(yōu)化網(wǎng)址+目標網(wǎng)址”組合而成的302網(wǎng)址,藉此接獲用戶(hù)點(diǎn)擊,騙取網(wǎng)頁(yè)權重。目前,302重定向已經(jīng)被視為垃圾信息,遭到各大搜索引擎的打擊。
二:消耗優(yōu)化網(wǎng)址資源
302重定向的排列組合,有些站長(cháng)使用302重定向并不是為了欺騙搜索引擎,僅僅是為了防止自己網(wǎng)站的通過(guò)外部鏈接流向其他權重。這種302重定向很容易遭到惡意訪(fǎng)問(wèn),訪(fǎng)問(wèn)者將“優(yōu)化網(wǎng)址”與任意網(wǎng)址甚至是一段字符串組合,濫用網(wǎng)站本身的302重定向功能消耗服務(wù)器資源,返回大量的302、404代碼,影響網(wǎng)站的穩定性。
三:跨站腳本攻擊
跨站腳本攻擊漏洞,根據網(wǎng)站安全監測工具的報告,這種302重定向實(shí)際上是一種跨站腳本攻擊漏洞,惡意用戶(hù)可以使用該漏洞來(lái)盜取用戶(hù)賬戶(hù)信息、模擬其他用戶(hù)身份登錄,更甚至可以修改網(wǎng)頁(yè)呈現給其他用戶(hù)的內容。極大的妨害了網(wǎng)絡(luò )安全和用戶(hù)體驗。
除了301到302,還有其他方法實(shí)現重定向。HTML文檔的頭中包含的meta refresh標簽可以在content屬性所指定的秒數之后重定向到url屬性的地址。就是的document.location可以設置。但是如果必須采用重定向,作者推薦使用標準的3**HTTP狀態(tài)碼,這主要是為了確保后退按鈕可以正常工作。
重定向是如何損傷性能的
如果第一個(gè)請求就是重定向,在重定向完畢并且HTML文檔下載完畢之前,是沒(méi)有任何東西顯示給用戶(hù)的,就像js和css引起的白屏一樣。在用戶(hù)和HTML之間插入的重定向延遲了延遲了頁(yè)面中的所有東西。
為什么使用重定向
用處:網(wǎng)站重新設計,跟蹤流量,記錄廣告點(diǎn)擊,建立已于記憶的url。
下面是一些使用重定向的典型解決方案:
1.缺少結尾的斜線(xiàn):我們在請求http://www.taoche.com/buycar時(shí)會(huì )引起重定向url變?yōu)?span style="color:#0000FF;font-family:Calibri;">http://www.taoche.com/buycar/ (多了一個(gè)杠),這是一種最為浪費,發(fā)生也最為頻繁的重定向。原因是:它允許自動(dòng)索引(autoindexing,自動(dòng)轉到默認的index.html上)并且能夠獲得與當前目錄相關(guān)的URL(如logo.gif)然而,很多流行的web頁(yè)面并不依賴(lài)于自動(dòng)索引,而是依賴(lài)特定的URL和處理器。另外,URL通常也與根目錄相關(guān)而不是和當前目錄相關(guān)。
注意當主機名后缺少皆為斜線(xiàn)時(shí)是不會(huì )發(fā)生重定向的,例如http://www.taoche.com不會(huì )產(chǎn)生重定向,但是也會(huì )加上斜杠http://www.taoche.com/。原因是,瀏覽區在進(jìn)行GET請求時(shí)必須指定一些路徑,如果沒(méi)有路徑,就會(huì )簡(jiǎn)單的使用文檔根(/)。
2.連接網(wǎng)站:當我們改變網(wǎng)站后端邏輯的時(shí)候,很可能所需的url也變了,這時(shí)候就需要將用戶(hù)從舊的url轉移到新的url,這個(gè)時(shí)候我們往往使用最多的也是重定向。我們應該盡量去避免。如果整合兩個(gè)后端可以避免,但是需要更多的開(kāi)發(fā)工作。
3.跟蹤站內流量:使用Referer日志,referrer網(wǎng)站來(lái)路;訪(fǎng)問(wèn)者進(jìn)入網(wǎng)站任何途徑。HTTP Referer是header的一部分,當瀏覽器向web服務(wù)器發(fā)出請求的時(shí)候,一般會(huì )帶上Referer,告訴服務(wù)器用戶(hù)從那個(gè)頁(yè)面連接過(guò)來(lái)的,服務(wù)器藉此可以獲得一些信息用于處理。
4.跟蹤出站流量:跟蹤出站流量的時(shí)候不能使用使用referrer。我們打開(kāi)百度,搜索一個(gè)關(guān)鍵詞,連到其他網(wǎng)站,發(fā)現就會(huì )有一次重定向。但是重定向是耗費性能的,所以我們看雅虎搜索http://www.yahoo.cn/,相同的操作并沒(méi)有重定向,雅虎使用的是信標,信標(beacon):
可以在HTTP請求的URL中包含跟蹤信息。跟蹤信息可以從信標web服務(wù)器的訪(fǎng)問(wèn)日志中提取出來(lái)。信標響應通常是一個(gè)1px*1px的透明圖片。書(shū)中還提到一個(gè)更為優(yōu)秀的204響應,因為他更小,從來(lái)不會(huì )被緩存,而且絕不會(huì )改變?yōu)g覽器的狀態(tài)。但是我沒(méi)有查到相關(guān)的資料。
在雅虎搜索中,目標是無(wú)論任何用戶(hù)單擊搜索結果連接時(shí)都要發(fā)送一個(gè)信標,在通過(guò)為這個(gè)連接提供的onclick處理器來(lái)完成。
注意,發(fā)送信標和頁(yè)面自身卸載之間存在竟態(tài)情形,圖片信標的onload處理器可以確保在卸載文檔之前信標傳送完畢。
代碼實(shí)例:
Performance - Wikipedia="" 這樣的寫(xiě)法可能會(huì )和使用重定向一樣慢,因為兩種技巧都必須一個(gè)額外的HTTP請求。穩重還提到一種XMLHttpRequest來(lái)發(fā)送信標,非常的復雜。說(shuō)到這里,可能會(huì )覺(jué)得信標無(wú)用,但是對于有target=”_bank”屬性的連接而言,信標能很好的工作,因為這種情下不會(huì )出現竟態(tài)情形,簡(jiǎn)單的信標就能很好的工作,彈出新的頁(yè)面或者彈出式廣告不回卸載前文檔,圖片信標的請求能夠順利完成而不會(huì )被中斷,雅虎搜索就是這個(gè)道理。
5.美化url:有的時(shí)候某個(gè)url很復雜,不利用用戶(hù)去輸入,我們就提供一個(gè)友好的url來(lái)給用戶(hù),這個(gè)時(shí)候也會(huì )發(fā)生重定向。我們也是用了url的重寫(xiě),使用的是ISAPI_REWRITE,URL重寫(xiě)組件。


